package com.pengliu.config;

import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;
import com.pengliu.common.exception.ServiceException;
import com.pengliu.common.exception.ExceptionEnums;
import com.pengliu.util.AjaxResult;

/**
 * @author 彭柳
 * <p>类描述: 全局异常管理</p>
 * <p>完成日期：2017年9月13日 下午3:52:36</p>
 */
@ControllerAdvice
public class ExceptionHandlerAdvice {
	
	/**
	 *	<p>函数名称: exception()</p>
	 *	<p>公司: 卡萨维斯</p>
	 *	<p>方法描述: 业务异常管理,返回JSON格式</p>
	 *	<p>方法调用例子：</p>
	 *	<p>完成日期：2017年9月13日 下午3:53:01</p>
	 *	@param exception
	 *	@param request
	 *	@return
	 *	@author  彭柳
	 *	@version 1.0
	 */
	@ResponseBody
	@ExceptionHandler(value = {ServiceException.class,IllegalArgumentException.class})
	public AjaxResult ServiceException(Exception exception , WebRequest request) {
		return AjaxResult.getFailResult(exception.getMessage());
	}
	
	
	@ResponseBody
	@ExceptionHandler(value = {HttpRequestMethodNotSupportedException.class})
	public AjaxResult httpRequestMethodNotSupportedException(Exception exception , WebRequest request) {
		AjaxResult ajaxResult = new AjaxResult(ExceptionEnums.RequestMethodError.getCode(),null,ExceptionEnums.RequestMethodError.getMessage());
		return ajaxResult;
	}
	
	/**
	 *	<p>函数名称: exception()</p>
	 *	<p>公司: 卡萨维斯</p>
	 *	<p>方法描述: 全局异常管理</p>
	 *	<p>方法调用例子：</p>
	 *	<p>完成日期：2017年9月14日 下午2:46:36</p>
	 *	@param exception
	 *	@param request
	 *	@return
	 *	@author  彭柳
	 *	@version 1.0
	 */
	@ResponseBody
	@ExceptionHandler(value = {Exception.class})
	public AjaxResult exception(Exception exception , WebRequest request) {
		exception.printStackTrace();
		AjaxResult ajaxResult = new AjaxResult(ExceptionEnums.Error.getCode(),null,ExceptionEnums.Error.getMessage());
		return ajaxResult;
	}
}
